#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
//class Solution {
//public:
//    string sortSentence(string s) {
//        vector<string> v;
//        vector<string> v1;
//        int a = 0;
//        for (int i = 0; i < s.size(); i++)
//        {
//            if (s[i] == 32)
//            {
//                a++;
//                break;
//            }
//            v[a] += s[i];
//        }
//        for (int a = 0; a < v.size(); a++)
//        {
//            v1[v[a].back()];
//        }
//    }
//};
class Solution {
public:
    struct wrold
    {
        string str;
        int dex;
        wrold(string& s, int i)
            :str(s)
            , dex(i)
        {

        }
    };
    string sortSentence(string s) {
        string ss;
        vector<wrold> v;
        int a = 0;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == 32) 
            {
                a++;
                break;
            }
            if (s[i] >= 48 && s[i] <= 57) 
            {
                v[a].dex= s[i];
            }
            else 
            {
                v[a].str += s[i];
            }
        }
        sort(v.begin(), v.end(),
            [](pair<string, int> a, pair<string, int> b) 
            {
                return a.second > b.second;
            });
        for (int c = 0; c < v.size(); c++) 
        {
            ss += v[c].str;
            if (c + 1 != v.size()) 
            {
                ss += " ";
            }
        }
        return ss;
    }
};
void Func(int N) {
    int count = 0;
    for (int k = 0; k < 2 * N * N; ++k) {
        ++count;
    } in
        t M = 10;
    while (M--) {
        ++count;
    }
    printf("%d\n", count);
}
int main()
{
    Solution s;
    s.sortSentence("is2 sentence4 This1 a3");
	
	return 0;
}